import http from 'wechat-http'

// 接口基础地址
http.baseURL = 'https://live-api.itheima.net'

// 请求拦截器
http.intercept.request = (options) => {
  // 指定默认的头信息
  const defaultHeaders = {}
  // 权限认证 (注意Bearer后面有一个空格)
  defaultHeaders.Authorization = 'Bearer ' + getApp().token
  // 合并头信息
  options.header = Object.assign({}, defaultHeaders, options.header)
  // 拦截器处理后的请求参数
  return options
}

// 响应拦截器
http.intercept.response = async ({
  statusCode,
  data,
  config
}) => {
  console.log(statusCode) // http 响应状态码
  console.log(config) // 发起请求时的参数
  // 拦截器处理后的响应结果
  if (data.code === 401) {
    // 获取refresh_token 更新token
    // 判断是哪个接口401了 如果是refreshToken这个接口401 那就去登录
    // http://dsfdsafdsa/refreshToken  利用includes方法
    if (config.url.includes('refreshToken')) {
      // refreshToken 401了
      const pageStack = getCurrentPages()
      const route = pageStack.pop().route
      // 路由跳转到登录页面
      return wx.redirectTo({
        url: '/pages/login/index?redirectUrl=' + route,
      })
    }
    const app = getApp()
    console.log(app);
    // 根据refresh_token获取新的token
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: 'Bearer ' + app.refresh_token
      }
    })
    console.log('我是刷新了的token', res);
    if (res.code !== 10000) return wx.utils.toast('更新token失败')
    // 更新token和refresh_token
    console.log(res.data.token);
    app.setToken('token', res.data.token)
    // 注意  数据是大驼峰
    app.setToken('refresh_token', res.data.refreshToken)

    // 把原来401的接口重新调用一下
    console.log(config);
    config = Object.assign(config, {
      header: {
        // 拼接上更新后的token
        Authorization: 'Bearer ' + res.data.token
      }
    })
    return http(config)

  }
  return data
}

// 挂载到 wx 全局命名空间
wx.http = http

// 也可作为模块导出
export default http